Python +numpy数组膨胀(填充)方法总结 |
您所在的位置:网站首页 › python 数组的数组 › Python +numpy数组膨胀(填充)方法总结 |
本文主要介绍数组的各种填充方法,包括数组按照原值复制扩大并填充,数组的扩大填充,数组边缘填充等。 1.数组的复制膨胀形如二维数组: [[1 2] [3 4]] 膨胀为: [[1 1 1 2 2 2] [1 1 1 2 2 2] [1 1 1 2 2 2] [3 3 3 4 4 4] [3 3 3 4 4 4] [3 3 3 4 4 4]] 实现方法: array=np.array([[1,2],[3,4]]) array2=np.kron(array, np.ones((2, 2), dtype=array.dtype)) 2.数组的填充Python编程中,当我们经常需要为数组进行填充时,numpy的np.pad函数提供了一个快速、高效的方法。 基本语法: numpy.pad(array, pad_width, mode, **kwargs)各参数的含义如下: array:需要填充的数组pad_width:填充的宽度,可以是单个整数、单个整数元组、或者是多个整数元组mode:填充模式,可以是常数、symmetric等下面我们来进行测试: 2.1 一维数组填充首先使用一维数组测试,代码如下: array = np.array([1, 2, 3, 4, 5,6,7]) array2 = np.pad(a, (0, 5), 'constant', constant_values=(0, 0))运行结果:array2 [1 2 3 4 5 6 7 0 0 0 0 0] 改为一下参数: array2 = np.pad(array, (2, 5), 'constant', constant_values=(0, 0))运行结果:array2 [0 0 1 2 3 4 5 6 7 0 0 0 0 0] 前面填充两个0,后面填充5个0. 前面填充8,后面填充9: array2 = np.pad(array, (2, 5), 'constant', constant_values=(8, 9))运行结果:array2 [8 8 1 2 3 4 5 6 7 9 9 9 9 9] 2.2 二维数组填充示例: array=np.array([[1,2,3],[4,5,6],[7,8,9]]) array2 = np.pad(array, ((2, 5),(2, 5)), 'constant', constant_values=(8, 9)) print('array2',array2)运行结果: array2 [[8 8 8 8 8 9 9 9 9 9] [8 8 8 8 8 9 9 9 9 9] [8 8 1 2 3 9 9 9 9 9] [8 8 4 5 6 9 9 9 9 9] [8 8 7 8 9 9 9 9 9 9] [8 8 9 9 9 9 9 9 9 9] [8 8 9 9 9 9 9 9 9 9] [8 8 9 9 9 9 9 9 9 9] [8 8 9 9 9 9 9 9 9 9] [8 8 9 9 9 9 9 9 9 9]] 2.3 其他方式填充,边缘填充除了常数模式之外,np.pad函数还支持其他几种填充模式,例如: symmetric:对称填充,填充部分是源数组的镜像edge:边缘填充,以数组的边缘元素进行填充minimum/maximum:最小值/最大值填充,将数组填充至源数组的最小值或最大值我们也可以结合使用多种填充模式,例如进行边缘填充: array=np.array([[1,2,3],[4,5,6],[7,8,9]]) array2 = np.pad(array, ((2, 2),(2, 2)), mode='edge') print('array2',array2)运行结果:array2 [[1 1 1 2 3 3 3] [1 1 1 2 3 3 3] [1 1 1 2 3 3 3] [4 4 4 5 6 6 6] [7 7 7 8 9 9 9] [7 7 7 8 9 9 9] [7 7 7 8 9 9 9]] 最大值填充: array=np.array([[1,2,3],[4,5,6],[7,8,9]]) array2 = np.pad(array, ((2, 2),(2, 2)), mode='maximum') print('array2',array2)运行结果:array2 [[9 9 7 8 9 9 9] [9 9 7 8 9 9 9] [3 3 1 2 3 3 3] [6 6 4 5 6 6 6] [9 9 7 8 9 9 9] [9 9 7 8 9 9 9] [9 9 7 8 9 9 9]] 对于边缘填充,我们还可以采用如下方法: import numpy as np def array_expand(array,expand_size): # 获取原始数组尺寸 height, width = array.shape # 创建新的扩展后的数组 expanded_array = np.zeros((height + expand_size+1, width + expand_size+1), dtype=array.dtype) # 复制原始数组到新数组的内部区域 expanded_array[1:-1, 1:-1] = array # 将原数组的上下左右四周扩展 expanded_array[0, 1:-1] = array[0, :] # 复制第一行 expanded_array[-1, 1:-1] = array[-1, :] # 复制最后一行 expanded_array[1:-1, 0] = array[:, 0] # 复制第一列 expanded_array[1:-1, -1] = array[:, -1] # 复制最后一列 expanded_array[0, 0] = array[0, 0] # 左上角像素 expanded_array[0, -1] = array[0, -1] # 右上角像素 expanded_array[-1, 0] = array[-1, 0] # 左下角像素 expanded_array[-1, -1] = array[-1, -1] # 右下角像素 # 返回扩展后的数组 return expanded_array array=np.array([[1,2,3],[4,5,6],[7,8,9]]) windows_size=7 for i in range(0 ,windows_size//2): array = array_expand(array, 1) print(array)windows_size是进行卷积运算时候窗口的大小。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |